#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)

#include <stdio.h>

#define SWAP(N) (((N&(unsigned int)0x55555555)<<1)+((N&(unsigned int)0xaaaaaaaa)>>1))

int main()
{
	int a = SWAP(5);
	printf("%d\n", a);


	return 0;
}

/*
-1 & 0x55555555        : 01010101010101010101010101010101
(-1 & 0x55555555) << 1 : 10101010101010101010101010101010
-1 & 0xaaaaaaaa        : 10101010101010101010101010101010
(-1 & 0xaaaaaaaa) >> 1 : 11010101010101010101010101010101

			10101010101010101010101010101010 
		+	11010101010101010101010101010101
		   101111111111111111111111111111111                              

*/